package jmine.tec.report.api;

/**
 * Interface do objeto que armazena os parâmetros para os renderizadores.
 * 
 * @author lundberg
 */
public interface RendererParameters extends Cloneable {

    /**
     * Obtém o valor do parâmetro com a chave dada.
     * 
     * @param key key
     * @return string
     */
    String getString(String key);

    /**
     * Obtém o valor do parâmetro com a chave dada, retorna o valor default dado caso não exista valor definido com a chave.
     * 
     * @param key key
     * @param defaultValue defaultValue
     * @return string
     */
    String getString(String key, String defaultValue);

    /**
     * Obtém o valor do parâmetro com a chave dada.
     * 
     * @param key key
     * @return long
     */
    Long getLong(String key);

    /**
     * Obtém o valor do parâmetro com a chave dada, caso não exista retorna o valor default.
     * 
     * @param key key
     * @param defaultValue defaultValue
     * @return long
     */
    Long getLong(String key, Long defaultValue);

    /**
     * Obtém o valor do parâmetro com a chave dada, caso não exista retorna o valor default.
     * 
     * @param key key
     * @param defaultValue defaultValue
     * @return long
     */
    long getLong(String key, long defaultValue);

    /**
     * Obtém o valor do parâmetro com a chave dada.
     * 
     * @param key key
     * @return Boolean
     */
    Boolean getBoolean(String key);

    /**
     * Obtém o valor do parâmetro com a chave dada, caso não exista retorna o valor default.
     * 
     * @param key key
     * @param defaultValue defaultValue
     * @return Boolean
     */
    Boolean getBoolean(String key, Boolean defaultValue);

    /**
     * Obtém o valor do parâmetro com a chave dada, caso não exista retorna o valor default.
     * 
     * @param key key
     * @param defaultValue defaultValue
     * @return Boolean
     */
    boolean getBoolean(String key, boolean defaultValue);

    /**
     * Obtém o valor do parâmetro com a chave dada.
     * 
     * @param key key
     * @return Float
     */
    Float getFloat(String key);

    /**
     * Obtém o valor do parâmetro com a chave dada, caso não exista retorna o valor default.
     * 
     * @param key key
     * @param defaultValue defaultValue
     * @return Float
     */
    Float getFloat(String key, Float defaultValue);

    /**
     * Obtém o valor do parâmetro com a chave dada, caso não exista retorna o valor default.
     * 
     * @param key key
     * @param defaultValue defaultValue
     * @return float
     */
    float getFloat(String key, float defaultValue);

    /**
     * Obtém o valor do parâmetro com a chave dada.
     * 
     * @param key key
     * @return Integer
     */
    Integer getInteger(String key);

    /**
     * Obtém o valor do parâmetro com a chave dada, caso não exista retorna o valor default.
     * 
     * @param key key
     * @param defaultValue defaultValue
     * @return Integer
     */
    Integer getInteger(String key, Integer defaultValue);

    /**
     * Obtém o valor do parâmetro com a chave dada, caso não exista retorna o valor default.
     * 
     * @param key key
     * @param defaultValue defaultValue
     * @return int
     */
    int getInteger(String key, int defaultValue);

    /**
     * Armazena o parâmetro
     * 
     * @param key key
     * @param value value
     */
    void put(String key, String value);

    /**
     * Define o parâmetro pai deste.
     * 
     * @param parent parent
     */
    void setParent(RendererParameters parent);

    /**
     * {@inheritDoc}
     */
    RendererParameters clone();
}
